using System;
using System.Collections.Generic;
using System.Transactions;

using PMServiceDesk.DataType;
using PMServiceDesk.DataAccess;
using PMServiceDesk.Utils.ManejoDatos;

namespace PMServiceDesk.BusinessLogic
{
    public class ActividadLogic
    {
        #region Variables

        private ActividadData _actividadData;

        #endregion

        #region Constructores

        public ActividadLogic()
        {
            _actividadData = new ActividadData();
        }

        #endregion

        #region Metodos

        public ActividadType CargarPorId(string id)
        {
            _actividadData.FiltrarPorId(id);

            return _actividadData.Cargar();
        }

        public ActividadType CargarVistaPorId(string id)
        {
            _actividadData.FiltrarPorId(id);

            return _actividadData.CargarVista();
        }

        public void Grabar(ActividadType actividad)
        {
            using(TransactionScope transaccion = new TransactionScope())
            {
                _actividadData.Grabar(actividad);

                InteresadoPaqueteTrabajoType i = new InteresadoPaqueteTrabajoType();
                i.PaqueteTrabajoId = actividad.PaqueteTrabajoId;
                i.UsuarioRegistroId = actividad.UsuarioRegistroId;
                i.UsuarioInteresadoId = actividad.UsuarioResponsableId;

                new InteresadoPaqueteTrabajoLogic().GrabarInteresadosLineaBase(i);

                transaccion.Complete();
            }
        }

        public void Eliminar(string id)
        {
            _actividadData.Eliminar(id);
        }

        public List<ActividadType> CargarExplorador(string paqueteTrabajoId)
        {
            if(paqueteTrabajoId != "") _actividadData.FiltrarPorPaqueteTrabajoId(paqueteTrabajoId);

            return _actividadData.CargarListaVista();
        }

        public List<ActividadType> CargarExploradorPaginado(ActividadType registroBusqueda, int paginaActual = 0, int cantidadMostrar = 0, string orderBy = "")
        {
            _actividadData.FiltrarPorPaqueteTrabajoId(registroBusqueda.PaqueteTrabajoId);

            if (registroBusqueda.EstadoPaqueteTrabajoId != "") _actividadData.FiltrarPorEstadoPaqueteTrabajoId(registroBusqueda.EstadoPaqueteTrabajoId);
            if (registroBusqueda.UsuarioResponsableId != "") _actividadData.FiltrarPorUsuarioResponsableId(registroBusqueda.UsuarioResponsableId);
            if (registroBusqueda.CodigoCuenta != "") _actividadData.FiltrarPorCodigoCuenta(registroBusqueda.CodigoCuenta);
            if (registroBusqueda.Nombre != "") _actividadData.FiltrarPorNombre(registroBusqueda.Nombre);
            if (registroBusqueda.FechaInicio != "") _actividadData.FiltrarPorFechaInicio(ConvertFormat.Char_To_Date(registroBusqueda.FechaInicio));
            if (registroBusqueda.FechaFin != "") _actividadData.FiltrarPorFechaFin(ConvertFormat.Char_To_Date(registroBusqueda.FechaFin));

            return _actividadData.CargarListaVista(paginaActual, cantidadMostrar, orderBy);
        }
        #endregion
    }
}
